package cn.com.surker.material.service;

import cn.com.surker.system.entity.DataSourceInfo;

import java.util.List;
import java.util.Map;

/**
 * @Author lucky
 * @create 2021年11月04 11:37
 * @desc 原材采购报表
 */
public interface IMaterialPurchaseReportService {



    /**
     * 原材采购日报表
     * @param ds
     * @param date 日期
     * @param dateType 类型(0:日报,1:月报)
     * @return
     */
	Map<String, List<Map<String, Object>>> queryMaterialReport(DataSourceInfo ds, String date, String name, Integer dateType, Integer type);


    /**
     * 原材采购日报表(集团)
     * @param date 日期
     * @param dateType 类型(0:日报,1:月报)
     * @return
     */
	Map<String, Object> queryMaterialGroupReport(String date, Integer dateType, Integer type);

    /**
     * 多线程执行原材采购日报表(集团)
     * @param dsList
     * @return
     */
    void threadMaterialGroupReport();

	/**
	 * 原材采购统计报表
	 * @param dsList			数据源列表
	 * @param startTime			起始时间
	 * @param endTime			截止时间
	 * @param reportStatus		报表类型 0:日报，1：月报
	 * @param redisSuffixKey	redis后缀
	 */
	void statisticsPurchase(String startTime, String endTime, Integer reportStatus, String redisSuffixKey);

	/**
	 * 原材消耗报表
	 * @param dsList			数据源列表
	 * @param startTime			起始时间
	 * @param endTime			截止时间
	 * @param reportStatus		报表类型 0:日报，1：月报
	 * @param redisSuffixKey	redis后缀
	 */
	void statisticsConsume(String startTime, String endTime, Integer reportStatus, String redisSuffixKey);

	/**
	 * 原材进料数据
	 * @param ds
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	List<Map<String,Object>> purchase(DataSourceInfo ds,String startTime,String endTime);

	/**
	 * 二级材料进料数据（不包含金额）
	 * @param ds			数据源
	 * @param startTime		起始时间
	 * @param endTime		截止时间
	 * @return
	 */
	List<Map<String,Object>> purchaseSecond(DataSourceInfo ds,String startTime,String endTime);

	/**
	 * 二级材料消耗数据（不包含金额）
	 * @param ds			数据源
	 * @param startTime		起始时间
	 * @param endTime		截止时间
	 * @return
	 */
	List<Map<String,Object>> consumeSecond(DataSourceInfo ds, String startTime, String endTime);

	/**
	 * 查询二级类型
	 * @param ds
	 * @return
	 */
	List<String> secondType(DataSourceInfo ds);

	/**
	 * 查询一级大类
	 * @param ds
	 * @return
	 */
	List<String> bigType(DataSourceInfo ds);
	/**
	 * 大类进料数据
	 * @param ds
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	List<Map<String,Object>> purchaseBigType(DataSourceInfo ds,String startTime,String endTime);

	/**
	 * 大类消耗数据（不包含金额）
	 * @param ds			数据源
	 * @param startTime		起始时间
	 * @param endTime		截止时间
	 * @return
	 */
	List<Map<String,Object>> consumeBigType(DataSourceInfo ds, String startTime, String endTime);

	/**
	 * 查询采购金额
	 * @param ds
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	Double queryPurchaseMoney(DataSourceInfo ds,String startTime,String endTime,String nameNorms);


	/**
	 * 一级原材使用量
	 * @param ds				数据源
	 * @param startTime			起始时间
	 * @param endTime			截止时间
	 * @param strengthLevel		强度等级
	 * @param firstType			材料类型
	 * @return
	 */
	List<Map<String,Object>> strengthLevelFirstTypeConsume(DataSourceInfo ds,String startTime,String endTime,String strengthLevel,String firstType);

	/**
	 * 二级原材使用量
	 * @param ds
	 * @param startTime
	 * @param endTime
	 * @param strengthLevel
	 * @param firstType
	 * @return
	 */
	List<Map<String,Object>> strengthLevelSecondTypeConsume(DataSourceInfo ds,String startTime,String endTime,String strengthLevel,String firstType);

	/**
	 * 查询库存
	 * @param ds				数据源
	 * @param time				时间节点
	 * @return
	 */
	List<Map<String,Object>> bigTypeStock(DataSourceInfo ds, String time);

	/**
	 * 查询材料的单价
	 * @param ds				数据源
	 * @param endTime			取单价的截止时间
	 * @param nameNorms			材料规格
	 * @return
	 */
	Double materialUnitPrice(DataSourceInfo ds,String endTime,String nameNorms);

}
